namespace MLSharp.Utilities
{
	/// <summary>
	/// Defines the common interface of all dataset generators. 
	/// </summary>
	public interface IDataSetGenerator
	{
		/// <summary>
		/// Sets the random seed used to generate data.
		/// </summary>
		int Seed { set; }

		/// <summary>
		/// The amount of noise to apply to randomly generated instances.
		/// </summary>
		/// <value>The default is 5.</value>
		double NoiseFactor { get; set; }

		/// <summary>
		/// Determines how many attributes to use to construct each level of the cluster tree.
		/// </summary>
		/// <value>The default is 5.</value>
		int AttributeFactor { get; set; }

		/// <summary>
		/// The depth of the tree to create.
		/// </summary>
		/// <value>The default is 4.</value>
		int Depth { get; set; }

		/// <summary>
		/// The number of instances to create.
		/// </summary>
		/// <value>The default is 128.</value>
		int NumberOfInstances { get; set; }

		/// <summary>
		/// The number of child branches to create at each step down the tree.
		/// </summary>
		/// <value>The default is 2.</value>
		int BranchingFactor { get; set; }

		/// <summary>
		/// Generates a synthetic dataset suitable for hierarchical clustering.
		/// </summary>
		/// <returns>The dataset.</returns>
		IDataSet GenerateDataSet();
	}
}